
Ethan Collins
Pattern Recognition Specialist

Apakah tugas pengambilan data web atau otomasi Anda diblokir oleh AWS WAF (Web Application Firewall) yang tampaknya tidak terdaki? Ini adalah tantangan umum bagi banyak pengembang. AWS WAF adalah layanan keamanan yang kuat dari Amazon yang dirancang untuk melindungi situs web dari eksploit web umum dan bot jahat. Ini mengidentifikasi dan memblokir aktivitas mencurigakan dengan menganalisis pola lalu lintas, menggunakan metode seperti tantangan JavaScript (mengembalikan kode status 202) dan captcha gambar yang lebih kompleks (mengembalikan kode status 405).
Meskipun penting untuk perlindungan situs web, langkah keamanan ini bisa menjadi penghalang besar bagi skrip otomasi yang sah. Untungnya, dengan alat yang tepat, Anda dapat melewati perlindungan ini secara efektif. Panduan ini akan memberikan panduan langkah demi langkah tentang cara menggunakan Python dan CapSolver untuk mendapatkan aws-waf-token secara mudah, memungkinkan akses yang mulus ke situs web yang dilindungi AWS WAF.
Sebelum memulai, pastikan Anda memiliki alat dan informasi berikut siap:
Pertama, kita perlu menginstal beberapa perpustakaan Python kunci untuk membuat permintaan HTTP dan menganalisis HTML. Buka terminal Anda dan jalankan perintah berikut:
pip install capsolver requests beautifulsoup4
Berikut adalah kode Python lengkap untuk menyelesaikan tantangan dan captcha AWS WAF menggunakan CapSolver. Kode ini didasarkan pada praktik terbaru dari dokumentasi resmi CapSolver, memiliki struktur yang lebih bersih, dan secara otomatis menangani dua skenario pemblokiran paling umum.
import capsolver
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urlparse
# -------------------SILAKAN UBAH NILAI-NILAI BERIKUT-------------------
# Detail proxy Anda dalam format: http://username:password@ip:port
PROXY = "http://username:password@ip:port"
# URL situs web tujuan yang ingin Anda selesaikan AWS WAF-nya
PAGE_URL = "https://www.situs-web-aws-anda.com"
# Kunci API Anda dari dashboard CapSolver
CAPSOLVER_API_KEY = "Kunci_API_Anda"
# ----------------------------------------------------------------
def solve_aws_waf(is_captcha_challenge, **kwargs):
"""
Menyelesaikan tantangan AWS WAF atau captcha menggunakan CapSolver.
:param is_captcha_challenge: True untuk captcha (kode status 405), False untuk tantangan JavaScript (kode status 202).
:param kwargs: Parameter yang diperlukan untuk tugas penyelesaian.
:return: Objek solusi, atau None jika gagal.
"""
task_type = "AntiAwsWafTask" if is_captcha_challenge else "AntiAwsWafTaskProxyLess"
print(f"Membuat tugas '{task_type}'...")
task_payload = {
"type": task_type,
"websiteURL": PAGE_URL,
}
# Tambahkan parameter spesifik berdasarkan jenis tantangan
if is_captcha_challenge:
# Untuk tantangan captcha, diperlukan awsKey, awsIv, awsContext
task_payload.update({
"awsKey": kwargs.get("awsKey"),
"awsIv": kwargs.get("awsIv"),
"awsContext": kwargs.get("awsContext"),
"awsChallengeJS": kwargs.get("awsChallengeJS"),
"proxy": PROXY
})
else:
# Untuk tantangan JavaScript, hanya diperlukan URL awsChallengeJS
task_payload["awsChallengeJS"] = kwargs.get("awsChallengeJS")
try:
solution = capsolver.solve(task_payload)
if solution and solution.get("errorId", 0) == 0:
print("Solusi berhasil diperoleh!")
return solution
else:
error_desc = solution.get('errorDescription', 'Kesalahan tidak diketahui') if solution else 'Kesalahan tidak diketahui'
print(f"Gagal menyelesaikan tugas: {error_desc}")
return None
except Exception as e:
print(f"Terjadi pengecualian saat memanggil CapSolver: {e}")
return None
def main():
"""Fungsi utama untuk menjalankan seluruh proses."""
capsolver.api_key = CAPSOLVER_API_KEY
session = requests.Session()
session.proxies = {"http": PROXY, "https": PROXY}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
print(f"Mencoba mengakses: {PAGE_URL}")
response = session.get(PAGE_URL, headers=headers)
print(f"Menerima kode status: {response.status_code}")
solution = None
# Skenario 1: Menangani Tantangan JavaScript AWS (Kode Status 202)
if response.status_code == 202:
print("Tantangan JavaScript AWS terdeteksi.")
soup = BeautifulSoup(response.content, 'html.parser')
script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
if script_tag:
challenge_js_url = script_tag['src']
print(f"Menemukan URL tantangan JS: {challenge_js_url}")
solution = solve_aws_waf(is_captcha_challenge=False, awsChallengeJS=challenge_js_url)
else:
print("Kesalahan: Tidak dapat menemukan skrip tantangan AWS.")
# Skenario 2: Menangani Captcha AWS (Kode Status 405)
elif response.status_code == 405:
print("Captcha AWS terdeteksi.")
soup = BeautifulSoup(response.content, 'html.parser')
script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
script_text_tag = soup.find('script', string=re.compile('.*key.*'))
if script_tag and script_text_tag:
challenge_js_url = script_tag['src']
script_text = script_text_tag.string
key = re.search(r'"key":"(.*?)"', script_text).group(1)
iv = re.search(r'"iv":"(.*?)"', script_text).group(1)
context = re.search(r'"context":"(.*?)"', script_text).group(1)
print(f"Parameter yang diekstrak: Key={key[:5]}..., IV={iv[:5]}..., Context={context[:5]}...")
solution = solve_aws_waf(
is_captcha_challenge=True,
awsKey=key,
awsIv=iv,
awsContext=context,
awsChallengeJS=challenge_js_url
)
else:
print("Kesalahan: Gagal mengekstrak semua parameter captcha yang diperlukan dari halaman.")
# Jika berhasil diselesaikan, atur cookie dan coba ulang permintaan
if solution and solution.get("cookie"):
aws_token = solution["cookie"]
print(f"Berhasil memperoleh aws-waf-token: {aws_token[:30]}...")
domain = f".{urlparse(PAGE_URL).netloc}"
session.cookies.set("aws-waf-token", aws_token, domain=domain)
print("Cookie diatur. Mencoba ulang permintaan...")
final_response = session.get(PAGE_URL, headers=headers)
print(f"Kode status permintaan akhir: {final_response.status_code}")
if final_response.status_code == 200:
print("Berhasil melewati AWS WAF!")
# print(final_response.text) # Hapus tanda komentar untuk melihat konten halaman
else:
print("Permintaan gagal setelah mengatur cookie. Periksa token atau proxy.")
else:
print("Gagal menyelesaikan AWS WAF. Keluar.")
if __name__ == "__main__":
main()
Sebelum menjalankan kode, pastikan untuk mengubah variabel berikut:
PROXY: Ganti ini dengan alamat dan kredensial server proxy Anda. Formatnya harus http://username:password@ip:port.CAPSOLVER_API_KEY: Temukan kunci API Anda di Dashboard CapSolver dan ganti placeholder-nya.PAGE_URL: Ganti ini dengan URL situs web tujuan yang dilindungi AWS WAF.Dengan mengintegrasikan CapSolver ke dalam alur kerja otomasi Python Anda, Anda dapat secara efektif menangani tantangan JavaScript dan captcha yang dipicu oleh AWS WAF. Pendekatan ini menyederhanakan proses verifikasi yang kompleks menjadi satu panggilan API, memungkinkan Anda fokus pada logika bisnis inti Anda alih-alih terjebak dalam perang terus-menerus melawan teknologi anti-bot. Ini adalah solusi yang tak ternilai bagi setiap pengembang yang perlu berinteraksi dengan situs yang dilindungi AWS WAF.
Gunakan kode bonus CAPN saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan bonus tambahan 5% setiap kali recharge — tanpa batas.
Segera klaim di Dashboard CapSolver Anda
Q1: Mengapa saya harus menggunakan proxy?
A1: AWS WAF secara ketat memantau perilaku alamat IP. Permintaan dari pusat data atau IP yang dicurigai mudah diblokir. Menggunakan proxy berkecepatan tinggi rumah tangga atau ISP meniru perilaku akses pengguna nyata dan merupakan langkah pertama kritis untuk berhasil melewati WAF.
Q2: Berapa lama token aws-waf-token berlaku?
A2: Validitas token ini biasanya sangat singkat, mungkin hanya beberapa menit. Setelah token habis masa berlakunya, Anda perlu menjalankan proses verifikasi kembali untuk mendapatkan yang baru. Penting untuk merancang logika pembaruan token di aplikasi Anda.
Q3: Apa perbedaan antara AntiAwsWafTask dan AntiAwsWafTaskProxyLess?
A3: AntiAwsWafTask digunakan untuk menyelesaikan captcha AWS, yang memerlukan lingkungan browser penuh (biasanya ditemukan dengan kode status 405) dan memerlukan proxy yang Anda sediakan. AntiAwsWafTaskProxyLess digunakan untuk tantangan JavaScript yang lebih sederhana (kode status 202), yang diselesaikan di server CapSolver dan tidak memerlukan Anda menyediakan proxy. Kode kami secara otomatis memilih jenis tugas yang sesuai berdasarkan kode status.
Q4: Apakah metode ini berfungsi untuk semua situs yang menggunakan AWS WAF?
A4: Metode ini efektif untuk konfigurasi AWS WAF standar kebanyakan. Namun, pemilik situs dapat menyesuaikan aturan WAF, yang mungkin meningkatkan kesulitan untuk melewati mereka. Jika Anda mengalami masalah, konsultasikan dokumentasi atau dukungan CapSolver. Tantangan yang berbeda mungkin memerlukan strategi yang berbeda.
Selesaikan CAPTCHA AWS WAF dalam pengambilan data web dengan CapSolver. Tingkatkan efisiensi, selesaikan tantangan, dan pastikan data mengalir secara mulus.

Menguasai penyelesaian tantangan CAPTCHA AWS WAF Amazon dalam otomatisasi browser dengan strategi ahli. Pelajari cara mengintegrasikan CapSolver untuk alur kerja otomatisasi yang mulus dan efisien. Panduan ini mencakup solusi berbasis token dan berbasis klasifikasi.
